String
1 | public final class String implements java.io.Serializable, Comparable<String>, CharSequence { |
String 不可变的原因
String类被final修饰,不能被继承
保存的是一个char型数组,而且是private修饰
但可以通过反射进行修改。
1
2
3
4
5
6String str="hello";
Class clazz=Class.forName("java.lang.String");
Field field=clazz.getDeclaredField("value");
field.setAccessible(true);
char[] value=(char[]) field.get(str);
String.replace
其中String.replace(char,char)要比String.replaceAll(String,String)性能好,字符在200左右就能看出差异。但relpaceAll()方法支持正则表达式,会对参数进行解析。
public String substring(int beginIndex)方法
结束位置为文本末尾。
1 | this.value = Arrays.copyOfRange(value, offset, offset+count) |
重写equals方法
1 | public boolean equals(Object anObject) { |
Long
byte 1字节
short 2字节
int 4字节
long 8字节
switch中不能使用long型数据,因为跳转表值的存储空间一般为32位,很难容纳下long。而String可以通过hashcode()方法转换为整数。
缓存
内部实现了一种缓存机制,缓存了从-128到127内的所有long值。
1 | private static class LongCache { |
工具类
通用特征
构造器必须私有,使用时无须初始化
工具类的工具方法必须被static和final来修饰,保证方法不可变
Arrays.binarySearch() 用于快速从数组中查找出对应的值